package com.chisheng.caa.config;

import com.chisheng.caa.pojo.*;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.Calendar;
import java.util.List;

/**
 * CAA 配置属性类
 *
 * @author Chisheng Chen
 */
@Data
@ConfigurationProperties(prefix = "caa")
public class CaaProperties {

    /**
     * 最大的缓存时间（ms）。默认 30 分钟。
     */
    private long maxTimeToLive = 1000 * 60 * 30;

    /**
     * 文件配置
     */
    private final File file = new File();

    /**
     * 导入配置
     */
    private final Importing importing = new Importing();

    /**
     * 导出配置
     */
    private final Exporting exporting = new Exporting();

    /**
     * 常量配置
     */
    private final Constants constants = new Constants();

    @Data
    public static class File {

        /**
         * 本地文件上传的文件存放路径。默认当前路径。
         */
        private String localRootPath = "./";

    }

    @Data
    public static class Importing {

        /**
         * @see Setting#getDuplicateStrategy()
         */
        private DuplicateStrategy duplicateStrategy = DuplicateStrategy.NOT_ALLOWED;

        /**
         * @see ImportCourseSetting#getLoadingStrategy()
         */
        private LoadingStrategy loadingStrategy = LoadingStrategy.OVERWRITE;

    }

    @Data
    public static class Exporting {

        /**
         * @see Setting#getDuplicateStrategy()
         */
        private DuplicateStrategy duplicateStrategy = DuplicateStrategy.NOT_ALLOWED;

        /**
         * @see ArrangeCourseSetting#getSemester()
         */
        private Semester semester = Semester.NONE;

        /**
         * 默认层次取值。其取值要与 {@link Constants#schoolRunningLevel} 对应。
         */
        private String defaultSchoolRunningLevel = "本科";

        /**
         * 默认布尔赋值（中文），其取值要与 {@link Constants#booleanValueCn} 对应。
         */
        private String defaultBooleanValueCn = "否";

        /**
         * 默认起始教学周数
         */
        private Integer defaultStartingTeachingWeek = 1;

        /**
         * 默认结束教学周数
         */
        private Integer defaultTerminalTeachingWeek = 16;

        /**
         * 自动生成年级的年份上限年范围。从系统当前年份开始计算。默认在系统所处年份加 1 年。
         */
        private Integer gradeYearUpperLimit = 1;

        /**
         * 自动生成年级的年份下限年范围。从系统当前年份开始计算。默认在系统所处年份减 8 年。
         */
        private Integer gradeYearLowerLimit = 8;

        /**
         * 导出 Excel 工作表下标
         */
        private Integer sheetNo = 0;

        /**
         * 导出 Excel 工作表名称
         */
        private String sheetName = String.format("sheet%d", sheetNo);

    }

    @Data
    public static class Constants {

        /**
         * 考试类型
         */
        private List<String> examinationType;

        /**
         * 层次
         */
        private List<String> schoolRunningLevel;

        /**
         * 课程类别
         */
        private List<String> courseType;

        /**
         * 总体课程分类
         */
        private List<String> courseCategory;

        /**
         * 中文的布尔取值
         */
        private List<String> booleanValueCn;

    }

}
